﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Linq;
using System.Web.Configuration;

namespace AstekServis.Web.Data
{
    public enum EvrakTipleri : byte
    {

        ToptanAlisIrsaliyesi,
        PerakendeAlisIrsaliyesi,

        ToptanAlisIadeIrsaliyesi,
        PerakendeAlisIadeIrsaliyesi,

        ToptanSatisIrsaliyesi,
        PerakendeSatisIrsaliyesi,

        ToptanSatisIadeIrsaliyesi,
        PerakendeSatisIadeIrsaliyesi,

        GelenDepoSevk,
        GidenDepoSevk,

        AlinanSiparis,
        VerilenSiparis,
        SubeSiparis,

        ToptanSatisFaturasi,
        PerakendeSatisFaturasi,

        ToptanSatisIadeFaturasi,
        PerakendeSatisIadeFaturasi,

        Tahsilat,

        HizmetFaturasi
    }

    public class ModemDurumu
    {
        public string Firma { get; set; }
        public string Grup { get; set; }
        public string Plaka { get; set; }
        public string KayitTarihi { get; set; }
        public string SonAktiflik { get; set; }
        public string SonAktifGun { get; set; }
        public string SistemNo { get; set; }
        public int AracID { get; set; }
        public string Picture { get; set; }
        public string ToolTip { get; set; }
        public string AracKodu { get; set; }
        public string Adres { get; set; }
    }

    public class Mikro
    {
        private const char satirAyrac = '¤';
        private const char alanAyrac = '¥';
        private const char veriAyrac = '§';
        string DefaultValue(string type)
        {
            switch (type)
            {
                case "System.String":
                    return string.Empty;
                case "System.Byte":
                case "System.Single":
                case "System.Double":
                case "System.Decimal":
                case "System.Int64":
                case "System.Int16":
                case "System.Int32":
                    return "0";
                case "System.DateTime":
                    return "01/01/1899";
                case "System.Boolean":
                    return "false";
                default:
                    return "";
            }
        }

        public bool KombineEvrak(Evrak[] evraks)
        {
            bool sonuc = false;
            if (evraks.Length == 3)
            {
                //AsTekEntities ent = new AsTekEntities();
                //string st = (((System.Data.EntityClient.EntityConnection)(ent.Connection)).StoreConnection).ConnectionString;
                //ent.Dispose();

                string st = "";
                //if (evraks[0].DbNo == 0)
                //{
                //st = WebConfigurationManager.ConnectionStrings["DbNo0"].ConnectionString;
                //}
                //else
                //{
                st = WebConfigurationManager.ConnectionStrings["DbNo1"].ConnectionString;
                //}

                using (SqlConnection cn = new SqlConnection(st))
                {
                    cn.Open();
                    SqlTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);

                    #region Hizmet faturası Kaydı
                    Evrak evrak = evraks[2];
                    if (evrak.Rows.Count > 0)
                    {
                        if (!evrak.EvrakSeriGirildi)
                            evrak.Sira = MaxEvrakNo(EvrakTipleri.HizmetFaturasi, evrak.Seri, st);

                        decimal[] vergiTutarlari;
                        decimal meblag = 0;
                        decimal aratoplam = 0;
                        int satir = 0;
                        foreach (var r in evrak.Rows)
                        {
                            vergiTutarlari = new decimal[10];
                            aratoplam = r.BurutTutar;
                            meblag = r.BurutTutar + r.KdvTutari;
                            vergiTutarlari[r.KdvSira] = r.KdvTutari;
                            int recID = CharEkle(evrak.EvrakCinsi, evrak.Seri, evrak.Sira, satir, evrak.Tarih, meblag, vergiTutarlari, evrak.PlasiyerKodu, evrak.CariKodu, aratoplam, evrak.BelgeNo, 0, "", 0, 0, 0, 3, r.StokKodu, evrak.SrmMerkezKodu, evrak.AracKodu, r.KdvSira, trn);
                            if (recID > -1)
                                BaglantiKaydet(evrak.ServisID, cn.Database, EvrakTipleri.HizmetFaturasi, evrak.Seri, evrak.Sira);
                            satir++;
                        }
                    }
                    #endregion

                    #region Alış İrsaliye Kaydı

                    if (!evraks[0].EvrakSeriGirildi)
                        evraks[0].Sira = MaxEvrakNo(evraks[0].EvrakCinsi, evraks[0].Seri, st);

                    if (SharEkle(evraks[0], trn, 0))
                        BaglantiKaydet(evraks[0].ServisID, cn.Database, evraks[0].EvrakCinsi, evraks[0].Seri, evraks[0].Sira);
                    #endregion

                    #region Satış İrsaliye Kaydı

                    if (!evraks[1].EvrakSeriGirildi)
                        evraks[1].Sira = MaxEvrakNo(evraks[1].EvrakCinsi, evraks[1].Seri, st);

                    if (SharEkle(evraks[1], trn, 0))
                        BaglantiKaydet(evraks[1].ServisID, cn.Database, evraks[1].EvrakCinsi, evraks[1].Seri, evraks[1].Sira);
                    #endregion

                    try
                    {
                        trn.Commit();
                        cn.Close();
                        sonuc = true;
                    }
                    catch (Exception)
                    {
                        if (trn != null)
                            trn.Rollback();
                    }
                    finally
                    {
                        if (cn != null && cn.State == ConnectionState.Open)
                            cn.Close();
                    }
                }
            }
            return sonuc;
        }
        public bool SingleEvrak(Evrak evrak)
        {
            bool sonuc = false;
            if (evrak != null)
            {
                string st = "";
                //if (evrak.DbNo == 0)
                //{
                //st = WebConfigurationManager.ConnectionStrings["DbNo0"].ConnectionString;
                //}
                //else
                //{
                st = WebConfigurationManager.ConnectionStrings["DbNo1"].ConnectionString;
                //}

                using (SqlConnection cn = new SqlConnection(st))
                {
                    cn.Open();
                    SqlTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);
                    if (!evrak.EvrakSeriGirildi)
                        evrak.Sira = MaxEvrakNo(evrak.EvrakCinsi, evrak.Seri, st);

                    int recID = 0;
                    if (evrak.EvrakCinsi == EvrakTipleri.ToptanSatisFaturasi)
                    {
                        decimal[] vergiTutarlari = new decimal[10];
                        decimal meblag = 0;
                        decimal aratoplam = 0;
                        int satir = 0;
                        foreach (var r in evrak.Rows)
                        {
                            aratoplam = r.BurutTutar;
                            meblag = r.BurutTutar + r.KdvTutari;
                            vergiTutarlari[r.KdvSira] = r.KdvTutari;
                            satir++;
                        }

                        recID = CharEkle(evrak.EvrakCinsi, evrak.Seri, evrak.Sira, satir, evrak.Tarih, meblag, vergiTutarlari, evrak.PlasiyerKodu, evrak.CariKodu, aratoplam, evrak.BelgeNo, 0, "", 0, 0, 0, 3, "", evrak.SrmMerkezKodu, evrak.AracKodu, 0, trn);

                    }

                    if (evrak.EvrakCinsi == EvrakTipleri.ToptanSatisFaturasi)
                    {
                        if (recID > -1)
                            sonuc = SharEkle(evrak, trn, recID);
                    }
                    else
                    {
                        sonuc = SharEkle(evrak, trn, 0);
                    }

                    if (sonuc)
                        BaglantiKaydet(evrak.ServisID, cn.Database, evrak.EvrakCinsi, evrak.Seri, evrak.Sira);

                    try
                    {
                        trn.Commit();
                        cn.Close();
                        sonuc = true;
                    }
                    catch (Exception)
                    {
                        if (trn != null)
                            trn.Rollback();
                    }
                    finally
                    {
                        if (cn != null && cn.State == ConnectionState.Open)
                            cn.Close();
                    }
                }
            }
            return sonuc;
        }
        public bool HizmetFatEkle(Evrak evrak)
        {
            bool sonuc = false;
            if (evrak != null)
            {
                //AsTekEntities ent = new AsTekEntities();
                //string st = (((System.Data.EntityClient.EntityConnection)(ent.Connection)).StoreConnection).ConnectionString;
                //ent.Dispose();

                string st = "";
                //if (evrak.DbNo == 0)
                //{
                //st = WebConfigurationManager.ConnectionStrings["DbNo0"].ConnectionString;
                //}
                //else
                //{
                st = WebConfigurationManager.ConnectionStrings["DbNo1"].ConnectionString;
                //}

                using (SqlConnection cn = new SqlConnection(st))
                {
                    cn.Open();
                    SqlTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);

                    #region Hizmet faturası Kaydı
                    if (!evrak.EvrakSeriGirildi)
                        evrak.Sira = MaxEvrakNo(EvrakTipleri.HizmetFaturasi, evrak.Seri, st);

                    decimal[] vergiTutarlari;
                    decimal meblag = 0;
                    decimal aratoplam = 0;
                    int satir = 0;
                    foreach (var r in evrak.Rows)
                    {
                        vergiTutarlari = new decimal[10];
                        aratoplam = r.BurutTutar - r.KdvTutari;
                        meblag = r.BurutTutar;
                        vergiTutarlari[r.KdvSira] = r.KdvTutari;

                        int recID = CharEkle(evrak.EvrakCinsi, evrak.Seri, evrak.Sira, satir, evrak.Tarih, meblag, vergiTutarlari, evrak.PlasiyerKodu, evrak.CariKodu, aratoplam, evrak.BelgeNo, 0, "", 0, 0, 0, 3, r.StokKodu, evrak.SrmMerkezKodu, evrak.AracKodu, r.KdvSira, trn);
                        if (recID > -1)
                            BaglantiKaydet(evrak.ServisID, cn.Database, EvrakTipleri.HizmetFaturasi, evrak.Seri, evrak.Sira);

                        satir++;
                    }
                    #endregion

                    try
                    {
                        trn.Commit();
                        cn.Close();
                        sonuc = true;
                    }
                    catch (Exception)
                    {
                        if (trn != null)
                            trn.Rollback();
                    }
                    finally
                    {
                        if (cn != null && cn.State == ConnectionState.Open)
                            cn.Close();
                    }
                }
            }
            return sonuc;
        }
        public string GetData(string sql)
        {
            AsTekEntities ent = new AsTekEntities();
            string st = (((System.Data.EntityClient.EntityConnection)(ent.Connection)).StoreConnection).ConnectionString;
            ent.Dispose();

            StringBuilder sb = new StringBuilder();
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, cn))
                {
                    SqlDataReader rd = cmd.ExecuteReader();
                    for (int i = 0; i < rd.FieldCount; i++)
                    {
                        sb.AppendFormat("{0}{1}{2}{3}", rd.GetName(i), alanAyrac, rd.GetFieldType(i).ToString(), satirAyrac);
                    }
                    sb.Remove(sb.Length - 1, 1);
                    sb.Append(veriAyrac);

                    while (rd.Read())
                    {
                        for (int i = 0; i < rd.FieldCount; i++)
                        {
                            if (rd[i] != DBNull.Value)
                            {
                                if (rd.GetFieldType(i) == typeof(DateTime))
                                {
                                    sb.Append(rd.GetDateTime(i).ToStr());
                                }
                                else
                                {
                                    sb.Append(rd[i].ToString().Replace("\r\n", ""));
                                }
                                sb.Append(alanAyrac);
                            }
                            else
                            {
                                sb.Append(DefaultValue(rd.GetFieldType(i).ToString()) + alanAyrac);
                            }
                        }
                        sb.Append(satirAyrac);
                    }
                    sb.Remove(sb.Length - 1, 1);
                }
                cn.Close();
            }
            return sb.ToString();
        }

        private void BaglantiKaydet(int servisID, string dbAdi, EvrakTipleri evrakTipi, string seri, int sira)
        {
            AsTekEntities ent = new AsTekEntities();
            string st = (((System.Data.EntityClient.EntityConnection)(ent.Connection)).StoreConnection).ConnectionString;
            ent.Dispose();
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("select isnull((SELECT     TOP 1 AracID FROM AsTek_AracHareketleri WITH (NOLOCK) WHERE     (ID = @ServisID)), 0)", cn))
                {
                    cmd.Parameters.Add("@ServisID", SqlDbType.Int).Value = servisID;
                    int aracID = Convert.ToInt32(cmd.ExecuteScalar());

                    cmd.CommandText = "if NOT EXISTS(SELECT     ID FROM         AsTek_ServisFaturaBaglanti WHERE     (ServisID = @ServisID) AND (AracID=@AracID) AND (VtAdi = @VtAdi) AND (EvrakTipi = @EvrakTipi) AND (EvrakSeri = @EvrakSeri) AND (EvrakSira = @EvrakSira)) INSERT INTO AsTek_ServisFaturaBaglanti (ServisID, AracID, VtAdi, EvrakTipi, EvrakSeri, EvrakSira) VALUES     (@ServisID,@AracID,@VtAdi,@EvrakTipi,@EvrakSeri,@EvrakSira)";


                    cmd.Parameters.Add("@AracID", SqlDbType.Int).Value = aracID;
                    cmd.Parameters.Add("@VtAdi", SqlDbType.NVarChar, 50).Value = dbAdi;
                    cmd.Parameters.Add("@EvrakTipi", SqlDbType.TinyInt).Value = (byte)evrakTipi;
                    cmd.Parameters.Add("@EvrakSeri", SqlDbType.NVarChar, 6).Value = seri;
                    cmd.Parameters.Add("@EvrakSira", SqlDbType.Int).Value = sira;
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                }
                cn.Close();
            }
        }

        private byte[] EvrakCins(EvrakTipleri cins, bool shar)
        {
            byte[] sonuc = new byte[4];
            switch (cins)
            {
                case EvrakTipleri.HizmetFaturasi:
                    sonuc[0] = 0;
                    sonuc[1] = 8;
                    sonuc[2] = 0;
                    sonuc[3] = 63;
                    break;
                case EvrakTipleri.ToptanAlisIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.PerakendeAlisIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 1;
                    sonuc[2] = 0;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 1;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 1;
                    sonuc[2] = 1;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.ToptanSatisIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.PerakendeSatisIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 1;
                    sonuc[2] = 0;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 1;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 1;
                    sonuc[2] = 1;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.AlinanSiparis:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 0;
                    break;
                case EvrakTipleri.VerilenSiparis:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 0;
                    break;
                case EvrakTipleri.GidenDepoSevk:
                case EvrakTipleri.GelenDepoSevk:
                    sonuc[0] = 2;
                    sonuc[1] = 6;
                    sonuc[2] = 0;
                    sonuc[3] = 2;
                    break;
                case EvrakTipleri.ToptanSatisFaturasi:
                    if (shar)
                    {
                        sonuc[0] = 1;
                        sonuc[1] = 0;
                        sonuc[2] = 0;
                        sonuc[3] = 4;
                    }
                    else
                    {
                        sonuc[0] = 0;
                        sonuc[1] = 6;
                        sonuc[2] = 0;
                        sonuc[3] = 63;
                    }
                    break;
                case EvrakTipleri.Tahsilat:
                    break;
                case EvrakTipleri.ToptanSatisIadeFaturasi:
                    break;
                default:
                    break;
            }
            return sonuc;
        }
        public int MaxEvrakNo(EvrakTipleri tip, String seri, string cnnString)
        {
            byte[] dizi = this.EvrakCins(tip, false);
            int sira = 1;
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("", cn))
                {
                    switch (tip)
                    {
                        case EvrakTipleri.HizmetFaturasi:
                        case EvrakTipleri.PerakendeSatisIadeFaturasi:
                        case EvrakTipleri.PerakendeSatisFaturasi:
                        case EvrakTipleri.ToptanSatisFaturasi:
                        case EvrakTipleri.ToptanSatisIadeFaturasi:
                        case EvrakTipleri.Tahsilat:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(cha_evrakno_sira),0) + 1 FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) WHERE     (cha_tip = {1}) AND (cha_normal_Iade = {2}) AND (cha_evrak_tip = {3}) AND (cha_evrakno_seri = ''{0}'')'", seri, dizi[0], dizi[2], dizi[3]);
                            break;
                        case EvrakTipleri.AlinanSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sip_evrakno_sira),0) + 1 FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 0) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.VerilenSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sip_evrakno_sira),0) + 1 FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 1) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.GidenDepoSevk:
                        case EvrakTipleri.GelenDepoSevk:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sth_evrakno_sira),0) + 1 as sira  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE     (sth_tip = 2) AND (sth_evraktip = 2) AND (sth_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeAlisIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIrsaliyesi:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sth_evrakno_sira),0) + 1 as sira  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE  (sth_evraktip = {1}) AND (sth_evrakno_seri = ''{0}'')'", seri, dizi[3]);
                            break;
                    }

                    sira = Convert.ToInt32(cmd.ExecuteScalar());
                }
                cn.Close();
            }
            return sira;
        }
        public bool CheckEvrakNo(EvrakTipleri tip, String seri, int sira, string cnnString)
        {
            byte[] dizi = this.EvrakCins(tip, false);
            bool evrakVar = false;
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("", cn))
                {
                    switch (tip)
                    {
                        case EvrakTipleri.HizmetFaturasi:
                        case EvrakTipleri.PerakendeSatisIadeFaturasi:
                        case EvrakTipleri.PerakendeSatisFaturasi:
                        case EvrakTipleri.ToptanSatisFaturasi:
                        case EvrakTipleri.ToptanSatisIadeFaturasi:
                        case EvrakTipleri.Tahsilat:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) WHERE     (cha_tip = {1}) AND (cha_normal_Iade = {2}) AND (cha_evrak_tip = {3}) AND (cha_evrakno_seri = ''{0}'') AND (cha_evrakno_sira={4})'", seri, dizi[0], dizi[2], dizi[3], sira);
                            break;
                        case EvrakTipleri.AlinanSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 0) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'') AND (sip_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.VerilenSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 1) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')  AND (sip_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.GidenDepoSevk:
                        case EvrakTipleri.GelenDepoSevk:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*)  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE     (sth_tip = 2) AND (sth_evraktip = 2) AND (sth_evrakno_seri = ''{0}'') AND (sth_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeAlisIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIrsaliyesi:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*)  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE  (sth_evraktip = {1}) AND (sth_evrakno_seri = ''{0}'') AND (sth_evrakno_sira={2})'", seri, dizi[3], sira);
                            break;
                    }

                    evrakVar = Convert.ToBoolean(cmd.ExecuteScalar());
                }
                cn.Close();
            }
            return evrakVar;
        }
        private Dictionary<int, int> KdvList(string cnnString)
        {
            Dictionary<int, int> sonuc = new Dictionary<int, int>();
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlDataAdapter adp = new SqlDataAdapter("select dbo.fn_VergiYuzde(1) as oran union all select dbo.fn_VergiYuzde(2) union all select dbo.fn_VergiYuzde(3) union all select dbo.fn_VergiYuzde(4) union all select dbo.fn_VergiYuzde(5) union all select dbo.fn_VergiYuzde(6)", cn))
                {
                    DataTable dt = new DataTable();
                    adp.Fill(dt);
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        sonuc.Add(i + 1, Convert.ToInt32(dt.Rows[i][0]));
                    }
                }
                cn.Close();
            }
            return sonuc;
        }
        private bool SharEkle(Evrak evrak, SqlTransaction trn, int charid)
        {
            bool sonuc = false;
            StringBuilder sb = new StringBuilder();
            sb.Append(" if exists(SELECT     sth_evrakno_seri  FROM         STOK_HAREKETLERI  WHERE     (sth_evrakno_seri = @Seri) AND (sth_evrakno_sira =@Sira) AND (sth_satirno = @Satir) AND (sth_evraktip = @Evrak_Tip) AND (sth_tip=@Tip) AND (sth_cins=@Cins) and (sth_normal_iade=@Normal_iade)) ");
            sb.Append(" 		UPDATE STOK_HAREKETLERI SET ");
            sb.Append(" 							  sth_lastup_user=@kullanici, sth_lastup_date=@crDate, sth_tarih=@Evrak_Tarih, sth_tip=@Tip, sth_cins=@Cins, sth_normal_iade=@Normal_iade, sth_belge_tarih=@Evrak_Tarih,  ");
            sb.Append(" 							  sth_stok_kod=@Stok_kod, sth_cari_kodu=@Cari_kod, sth_plasiyer_kodu=@plasiyer, sth_kur_tarihi='1899-12-30 00:00:00', sth_miktar=@Miktar, sth_miktar2=@Miktar, sth_birim_pntr=1, sth_tutar=@yekun, sth_iskonto1=@isk1_tutar, sth_iskonto2=@isk2_tutar, sth_iskonto3=@isk3_tutar,  ");
            sb.Append(" 							  sth_iskonto4=@isk4_tutar, sth_iskonto5=@isk5_tutar, sth_vergi_pntr=@Kdv,sth_vergi=@kdv_tutar, sth_odeme_op=@odeme, sth_sip_recid_dbcno=@norm_sip_dbc, sth_sip_recid_recno=@norm_sip_rec, sth_fat_recid_recno=@fatrecno, sth_giris_depo_no=@GirisDepo, sth_cikis_depo_no=@CikisDepo,  ");
            sb.Append(" 							  sth_malkbl_sevk_tarihi=@Evrak_Tarih, sth_cari_srm_merkezi=@srmerkez, sth_stok_srm_merkezi=@srmerkez, sth_fis_tarihi='1899-12-30 00:00:00', sth_maliyet_ana=@Fiyat, sth_maliyet_alternatif=@Fiyat, sth_maliyet_orjinal=@Fiyat, sth_vardiya_tarihi='1899-12-30 00:00:00',sth_subesip_recid_dbcno=@sube_sip_dbc,sth_subesip_recid_recno=@sube_sip_rec,sth_belge_no=@belge_no, ");
            sb.Append(" 							  sth_firmano=@firma_no,sth_subeno=@sube_no,sth_proje_kodu=@proje ");
            sb.Append(" 		WHERE     (sth_evrakno_seri = @Seri) AND (sth_evrakno_sira =@Sira) AND (sth_satirno = @Satir) AND (sth_evraktip = @Evrak_Tip AND (sth_tip=@Tip) AND (sth_cins=@Cins) and (sth_normal_iade=@Normal_iade)) ");
            sb.Append(" else ");
            sb.Append(" 		INSERT INTO STOK_HAREKETLERI ");
            sb.Append(" 		 (sth_RECid_DBCno,sth_RECid_RECno,sth_SpecRECno,sth_iptal,sth_fileid,sth_hidden,sth_kilitli,sth_degisti,sth_checksum,sth_create_user,sth_create_date,sth_lastup_user,sth_lastup_date,sth_special1,sth_special2,sth_special3,sth_firmano,sth_subeno,sth_tarih,sth_tip,sth_cins,sth_normal_iade,sth_evraktip,sth_evrakno_seri,sth_evrakno_sira,sth_satirno,sth_belge_no,sth_belge_tarih,sth_stok_kod,sth_isk_mas1,sth_isk_mas2,sth_isk_mas3,sth_isk_mas4,sth_isk_mas5,sth_isk_mas6,sth_isk_mas7,sth_isk_mas8,sth_isk_mas9,sth_isk_mas10,sth_sat_iskmas1,sth_sat_iskmas2,sth_sat_iskmas3,sth_sat_iskmas4,sth_sat_iskmas5,sth_sat_iskmas6,sth_sat_iskmas7,sth_sat_iskmas8,sth_sat_iskmas9,sth_sat_iskmas10,sth_pos_satis,sth_cari_cinsi,sth_cari_kodu,sth_cari_grup_no,sth_isemri_gider_kodu,sth_ismerkezi_kodu,sth_plasiyer_kodu,sth_kur_tarihi,sth_har_doviz_cinsi,sth_har_doviz_kuru,sth_alt_doviz_kuru,sth_stok_doviz_cinsi,sth_stok_doviz_kuru,sth_miktar,sth_miktar2,sth_birim_pntr,sth_tutar,sth_iskonto1,sth_iskonto2,sth_iskonto3,sth_iskonto4,sth_iskonto5,sth_iskonto6,sth_masraf1,sth_masraf2,sth_masraf3,sth_masraf4,sth_vergi_pntr,sth_vergi,sth_masraf_vergi_pntr,sth_masraf_vergi,sth_netagirlik,sth_odeme_op,sth_aciklama,sth_sip_recid_dbcno,sth_sip_recid_recno,sth_fat_recid_dbcno,sth_fat_recid_recno,sth_giris_depo_no,sth_cikis_depo_no,sth_malkbl_sevk_tarihi,sth_cari_srm_merkezi,sth_stok_srm_merkezi,sth_fis_tarihi,sth_fis_sirano,sth_vergisiz_fl,sth_maliyet_ana,sth_maliyet_alternatif,sth_maliyet_orjinal,sth_adres_no,sth_parti_kodu,sth_lot_no,sth_kons_recid_dbcno,sth_kons_recid_recno,sth_vardiya_tarihi,sth_vardiya_no,sth_satistipi,sth_proje_kodu,sth_ihracat_kredi_kodu,sth_exim_kodu,sth_otv_pntr,sth_otv_vergi,sth_bkm_recid_dbcno,sth_bkm_recid_recno,sth_karsikons_recid_dbcno,sth_karsikons_recid_recno,sth_iade_evrak_seri,sth_iade_evrak_sira,sth_diib_belge_no,sth_diib_satir_no,sth_mensey_ulke_tipi,sth_mensey_ulke_kodu,sth_brutagirlik,sth_halrehmiktari,sth_halrehfiyati,sth_halsandikmiktari,sth_halsandikfiyati,sth_halsandikkdvtutari,sth_disticaret_turu,sth_otvtutari,sth_otvvergisiz_fl,sth_direkt_iscilik_1,sth_direkt_iscilik_2,sth_direkt_iscilik_3,sth_direkt_iscilik_4,sth_direkt_iscilik_5,sth_genel_uretim_1,sth_genel_uretim_2,sth_genel_uretim_3,sth_genel_uretim_4,sth_genel_uretim_5,sth_yat_tes_kodu,sth_oiv_pntr,sth_oiv_vergi,sth_oivvergisiz_fl,sth_subesip_recid_dbcno,sth_subesip_recid_recno) ");
            sb.Append(" 		VALUES (0,-1,0,0,16,0,0,0,0,@kullanici,@crDate,@kullanici,@crDate,'','','',@firma_no,@sube_no,@Evrak_Tarih,@Tip,@Cins,@Normal_iade,@Evrak_Tip,@Seri,@Sira,@Satir,@belge_no,@Evrak_Tarih,@Stok_kod,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,@Cari_kod,0,'','',@plasiyer,'1899-12-30 00:00:00',0,1,1,0,1, @Miktar  , @Miktar  ,1, @yekun   ,@isk1_tutar,@isk2_tutar,@isk3_tutar,@isk4_tutar,@isk5_tutar,0,0,0,0,0,@Kdv,@kdv_tutar,0,0,0,@odeme,'',@norm_sip_dbc,@norm_sip_rec,0,@fatrecno,@GirisDepo,@CikisDepo,@Evrak_Tarih,@srmerkez,@srmerkez, '1899-12-30 00:00:00',0,0, @Fiyat  , @Fiyat  , @Fiyat  ,1,'',0,0,0,'1899-12-30 00:00:00',0,0,@proje,'','',0,0,0,0,0,0,'',0,'',0,0,'',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,0,0,@sube_sip_dbc,@sube_sip_rec) ");
            sb.Append(";update STOK_HAREKETLERI set sth_RECid_RECno=sth_RECno where sth_RECid_RECno=-1");

            DateTime defaultTarih = new DateTime(1899, 12, 31);

            try
            {
                using (SqlCommand cmd = new SqlCommand("", trn.Connection))
                {
                    cmd.Transaction = trn;
                    byte[] tipCins = EvrakCins(evrak.EvrakCinsi, true);
                    foreach (HareketBilgileri row in evrak.Rows)
                    {
                        cmd.CommandText = sb.ToString();

                        cmd.Parameters.Add("@Tip", SqlDbType.Int).Value = tipCins[0];
                        cmd.Parameters.Add("@Cins", SqlDbType.Int).Value = tipCins[1];
                        cmd.Parameters.Add("@Normal_iade", SqlDbType.Int).Value = tipCins[2];
                        cmd.Parameters.Add("@Evrak_Tip", SqlDbType.Int).Value = tipCins[3];
                        cmd.Parameters.Add("@Evrak_Tarih", SqlDbType.DateTime).Value = new DateTime(evrak.Tarih.Year, evrak.Tarih.Month, evrak.Tarih.Day);
                        cmd.Parameters.Add("@Seri", SqlDbType.VarChar).Value = evrak.Seri;
                        cmd.Parameters.Add("@Sira", SqlDbType.Int).Value = evrak.Sira;
                        cmd.Parameters.Add("@crDate", SqlDbType.DateTime).Value = DateTime.Now;
                        cmd.Parameters.Add("@Cari_kod", SqlDbType.VarChar).Value = evrak.CariKodu;
                        cmd.Parameters.Add("@plasiyer", SqlDbType.VarChar).Value = evrak.PlasiyerKodu;
                        cmd.Parameters.Add("@srmerkez", SqlDbType.VarChar).Value = evrak.SrmMerkezKodu;
                        cmd.Parameters.Add("@kullanici", SqlDbType.VarChar).Value = evrak.MikroKullanici;
                        cmd.Parameters.Add("@GirisDepo", SqlDbType.Int).Value = evrak.GirisDepoNo;
                        cmd.Parameters.Add("@CikisDepo", SqlDbType.Int).Value = evrak.CikisDepoNo;
                        cmd.Parameters.Add("@odeme", SqlDbType.Int).Value = 0; //odeme * (-1));
                        cmd.Parameters.Add("@belge_no", SqlDbType.VarChar).Value = evrak.BelgeNo;
                        cmd.Parameters.Add("@firma_no", SqlDbType.Int).Value = evrak.FirmaNo;
                        cmd.Parameters.Add("@sube_no", SqlDbType.Int).Value = evrak.SubeNo;
                        cmd.Parameters.Add("@proje", SqlDbType.VarChar).Value = evrak.AracKodu;
                        cmd.Parameters.Add("@Satir", SqlDbType.Int).Value = row.Satir;
                        cmd.Parameters.Add("@Stok_kod", SqlDbType.VarChar).Value = row.StokKodu;
                        cmd.Parameters.Add("@Miktar", SqlDbType.Decimal).Value = row.Miktar;
                        cmd.Parameters.Add("@yekun", SqlDbType.Decimal).Value = row.BurutTutar;
                        cmd.Parameters.Add("@isk1_tutar", SqlDbType.Decimal).Value = row.Isk1Tutar;
                        cmd.Parameters.Add("@isk2_tutar", SqlDbType.Decimal).Value = row.Isk2Tutar;
                        cmd.Parameters.Add("@isk3_tutar", SqlDbType.Decimal).Value = row.Isk3Tutar;
                        cmd.Parameters.Add("@isk4_tutar", SqlDbType.Decimal).Value = row.Isk4Tutar;
                        cmd.Parameters.Add("@isk5_tutar", SqlDbType.Decimal).Value = row.Isk5Tutar;
                        cmd.Parameters.Add("@Kdv", SqlDbType.Int).Value = row.KdvSira;
                        cmd.Parameters.Add("@fatrecno", SqlDbType.Int).Value = charid;


                        if (evrak.EvrakCinsi == EvrakTipleri.GelenDepoSevk || evrak.EvrakCinsi == EvrakTipleri.GidenDepoSevk)
                        {
                            cmd.Parameters.Add("@sube_sip_rec", SqlDbType.Int).Value = row.SipRecNo;
                            cmd.Parameters.Add("@sube_sip_dbc", SqlDbType.Int).Value = row.SipDbcNo;
                            cmd.Parameters.Add("@norm_sip_rec", SqlDbType.Int).Value = 0;
                            cmd.Parameters.Add("@norm_sip_dbc", SqlDbType.Int).Value = 0;
                        }
                        else
                        {
                            cmd.Parameters.Add("@sube_sip_rec", SqlDbType.Int).Value = 0;
                            cmd.Parameters.Add("@sube_sip_dbc", SqlDbType.Int).Value = 0;
                            cmd.Parameters.Add("@norm_sip_rec", SqlDbType.Int).Value = row.SipRecNo;
                            cmd.Parameters.Add("@norm_sip_dbc", SqlDbType.Int).Value = row.SipDbcNo;
                        }

                        cmd.Parameters.Add("@Fiyat", SqlDbType.Decimal).Value = row.Fiyat;
                        cmd.Parameters.Add("@kdv_tutar", SqlDbType.Float).Value = row.KdvTutari;

                        cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();

                        cmd.CommandText = "SELECT     sth_RECno  FROM         STOK_HAREKETLERI  WHERE     (sth_tip = @tip) AND (sth_cins = @cins) AND (sth_normal_iade = @normIade) AND (sth_evraktip = @evrTip) AND (sth_evrakno_seri = @seri) AND (sth_evrakno_sira = @sira) AND (sth_satirno = @satir)";
                        cmd.Parameters.Add("@tip", SqlDbType.TinyInt).Value = tipCins[0];
                        cmd.Parameters.Add("@cins", SqlDbType.TinyInt).Value = tipCins[1];
                        cmd.Parameters.Add("@normIade", SqlDbType.TinyInt).Value = tipCins[2];
                        cmd.Parameters.Add("@evrTip", SqlDbType.TinyInt).Value = tipCins[3];
                        cmd.Parameters.Add("@seri", SqlDbType.VarChar).Value = evrak.Seri;
                        cmd.Parameters.Add("@sira", SqlDbType.Int).Value = evrak.Sira;
                        cmd.Parameters.Add("@satir", SqlDbType.Int).Value = row.Satir;

                        object id = cmd.ExecuteScalar();
                        cmd.Parameters.Clear();

                        if (id != null && id != DBNull.Value)
                        {
                            row.Id = Convert.ToInt32(id);
                            if (row.SeriNolar.Length > 0)
                            {
                                foreach (string seri in row.SeriNolar)
                                {
                                    SerinoHareketEkle(seri, row.StokKodu, row.Id, defaultTarih, defaultTarih, defaultTarih, defaultTarih, "", 0, "", 0, 0, 0, "", "", trn);
                                }
                            }
                        }
                    }
                }
                sonuc = true;
            }
            catch (Exception)
            {
            }
            return sonuc;
        }
        private void SerinoHareketEkle(string seriNo, string stokKodu, int sharId, DateTime garantiBaslangic, DateTime garantiBitis, DateTime alisTarihi, DateTime satisTarihi, string alisSeri, int alisSira, string satisSeri, int satisSira, decimal alisFiyat, decimal satisFiyat, string alisCari, string satisCari, SqlTransaction trn)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("if exists(select ChHar_RECno from CIHAZ_HAREKETLERI where ChHar_SeriNo= @seriNo and ChHar_StokKodu=@stokKodu and ChHar_master_recno=@sharId)");
            sb.Append("update CIHAZ_HAREKETLERI set ChHar_Spec_Rec_no=0,ChHar_iptal=0,ChHar_fileid=98,ChHar_hidden=0,ChHar_kilitli=0,ChHar_degisti=0,ChHar_checksum=0,ChHar_lastup_user=1,ChHar_lastup_date=@tarih,ChHar_special1='',ChHar_special2='',ChHar_special3='',ChHar_master_tablo=0,ChHar_master_dbcno=0 where ChHar_SeriNo=@seriNo and ChHar_StokKodu=@stokKodu and ChHar_master_recno=@sharId else ");
            sb.Append("insert into CIHAZ_HAREKETLERI (ChHar_RECid_DBCno,ChHar_RECid_RECno,ChHar_Spec_Rec_no,ChHar_iptal,ChHar_fileid,ChHar_hidden,ChHar_kilitli,ChHar_degisti,ChHar_checksum,ChHar_create_user,ChHar_create_date,ChHar_lastup_user,ChHar_lastup_date,ChHar_special1,ChHar_special2,ChHar_special3,ChHar_SeriNo,ChHar_StokKodu,ChHar_master_tablo,ChHar_master_dbcno,ChHar_master_recno) values (0,-1,0,0,98,0,0,0,0,1,@tarih,1,@tarih,'','','',@seriNo,@stokKodu,0,0,@sharId) ");
            sb.Append(";update CIHAZ_HAREKETLERI set ChHar_RECid_RECno=ChHar_RECno where ChHar_RECid_RECno=-1");

            StringBuilder sb2 = new StringBuilder();
            sb2.Append("if exists(select chz_RECno from STOK_SERINO_TANIMLARI where chz_serino= @seriNo and chz_stok_kodu=@stokKodu)");
            sb2.Append("UPDATE    STOK_SERINO_TANIMLARI SET chz_Spec_Rec_no = 0, chz_iptal = 0, chz_fileid = 94, chz_hidden = 0, chz_kilitli = 0, chz_degisti = 0, chz_checksum = 0, chz_lastup_user = 1, chz_lastup_date = @tarih, chz_special1 = '', chz_special2 = '', chz_special3 = '', chz_Tuktckodu = '', chz_GrnBasTarihi = @garantiBaslangic,chz_GrnBitTarihi = @garantiBitis, chz_aciklama1 = '', chz_aciklama2 = '', chz_aciklama3 = '', chz_al_tarih = @alisTarih, chz_al_evr_seri = @alisSeri,chz_al_evr_sira = @alisSira, chz_st_tarih = @satisTarih, chz_st_evr_seri = @satisSeri, chz_st_evr_sira = @satisSira, chz_al_fiati_ana = @alisFiyat,chz_al_fiati_alt = @alisFiyat, chz_al_fiati_orj = @alisFiyat, chz_st_fiati_ana = @satisFiyat, chz_st_fiati_alt = @satisFiyat, chz_st_fiati_orj = @satisFiyat,chz_parca_garantisi = 0, chz_parca_serino = '', chz_parca_garanti_baslangic = @garantiBaslangic, chz_parca_garanti_bitis = @garantiBitis,chz_al_cari_kodu = @alisCari, chz_st_cari_kodu = @satisCari WHERE (chz_serino = @seriNo) AND (chz_stok_kodu = @stokKodu) else ");
            sb2.Append("INSERT INTO STOK_SERINO_TANIMLARI (chz_RECid_DBCno, chz_RECid_RECno, chz_Spec_Rec_no, chz_iptal, chz_fileid, chz_hidden, chz_kilitli, chz_degisti, chz_checksum, chz_create_user,chz_create_date, chz_lastup_user, chz_lastup_date, chz_special1, chz_special2, chz_special3, chz_serino, chz_stok_kodu, chz_grup_kodu, chz_Tuktckodu,chz_GrnBasTarihi, chz_GrnBitTarihi, chz_aciklama1, chz_aciklama2, chz_aciklama3, chz_al_tarih, chz_al_evr_seri, chz_al_evr_sira, chz_al_cari_kodu, chz_st_tarih,chz_st_evr_seri, chz_st_evr_sira, chz_st_cari_kodu, chz_al_fiati_ana, chz_al_fiati_alt, chz_al_fiati_orj, chz_st_fiati_ana, chz_st_fiati_alt, chz_st_fiati_orj,chz_parca_garantisi, chz_parca_serino, chz_parca_garanti_baslangic, chz_parca_garanti_bitis) VALUES (0, - 1, 0, 0, 94, 0, 0, 0, 0, 1,@tarih, 1,@tarih, '', '', '',@seriNo,@stokKodu, '', '',@garantiBaslangic,@garantiBitis, '', '','',@alisTarih,@alisSeri,@alisSira,@alisCari,@satisTarih,@satisSeri,@satisSira,@satisCari,@alisFiyat,@alisFiyat,@alisFiyat,@satisFiyat,@satisFiyat,@satisFiyat,0,'',@garantiBaslangic,@garantiBitis) ");
            sb2.Append(";update STOK_SERINO_TANIMLARI set chz_RECid_RECno=chz_RECno where chz_RECid_RECno=-1");

            List<SqlParameter> prmList = new List<SqlParameter>();
            prmList.Add(new SqlParameter() { ParameterName = "@seriNo", SqlDbType = SqlDbType.VarChar, Size = 25, Value = seriNo });
            prmList.Add(new SqlParameter() { ParameterName = "@stokKodu", SqlDbType = SqlDbType.VarChar, Size = 25, Value = stokKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@sharId", SqlDbType = SqlDbType.Int, Value = sharId });
            prmList.Add(new SqlParameter() { ParameterName = "@tarih", SqlDbType = SqlDbType.DateTime, Value = DateTime.Now });

            SqlConnection cn = trn.Connection;
            using (SqlCommand cmd = new SqlCommand(sb.ToString(), cn))
            {
                cmd.Transaction = trn;
                foreach (var item in prmList)
                {
                    cmd.Parameters.Add(item);
                }
                cmd.ExecuteNonQuery();

                prmList.Add(new SqlParameter() { ParameterName = "@alisSeri", SqlDbType = SqlDbType.VarChar, Size = 6, Value = alisSeri });
                prmList.Add(new SqlParameter() { ParameterName = "@alisSira", SqlDbType = SqlDbType.Int, Value = alisSira });
                prmList.Add(new SqlParameter() { ParameterName = "@satisSeri", SqlDbType = SqlDbType.VarChar, Size = 6, Value = satisSeri });
                prmList.Add(new SqlParameter() { ParameterName = "@satisSira", SqlDbType = SqlDbType.Int, Value = satisSira });
                prmList.Add(new SqlParameter() { ParameterName = "@alisFiyat", SqlDbType = SqlDbType.Float, Value = alisFiyat });
                prmList.Add(new SqlParameter() { ParameterName = "@satisFiyat", SqlDbType = SqlDbType.Float, Value = satisFiyat });
                prmList.Add(new SqlParameter() { ParameterName = "@alisTarih", SqlDbType = SqlDbType.DateTime, Value = alisTarihi });
                prmList.Add(new SqlParameter() { ParameterName = "@satisTarih", SqlDbType = SqlDbType.DateTime, Value = satisTarihi });
                prmList.Add(new SqlParameter() { ParameterName = "@garantiBaslangic", SqlDbType = SqlDbType.DateTime, Value = garantiBaslangic });
                prmList.Add(new SqlParameter() { ParameterName = "@garantiBitis", SqlDbType = SqlDbType.DateTime, Value = garantiBitis });
                prmList.Add(new SqlParameter() { ParameterName = "@alisCari", SqlDbType = SqlDbType.VarChar, Size = 25, Value = alisCari });
                prmList.Add(new SqlParameter() { ParameterName = "@satisCari", SqlDbType = SqlDbType.VarChar, Size = 25, Value = alisCari });

                cmd.ExecuteNonQuery();
            }
        }
        private int CharEkle(EvrakTipleri tip, string evrakSeri, int evrakSira, int satir, DateTime evrakTarihi, decimal meblag, decimal[] vergiler, string saticiKodu, string cariKodu, decimal araToplam, string belgeNo, int vade, string aciklama, decimal isk1Tutar, decimal isk2Tutar, decimal isk3Tutar, int cariCins, string kasaKodu, string srmMerkezi, string projeKodu, int kdvSira, SqlTransaction trn)
        {
            string sqlStr = "if exists(SELECT     cha_RECno FROM         CARI_HESAP_HAREKETLERI WHERE     (cha_evrak_tip = @cha_evrak_tip) AND (cha_evrakno_seri = @cha_evrakno_seri) AND (cha_evrakno_sira = @cha_evrakno_sira) AND (cha_satir_no = @cha_satir_no)) delete FROM CARI_HESAP_HAREKETLERI WHERE     (cha_evrak_tip = @cha_evrak_tip) AND (cha_evrakno_seri = @cha_evrakno_seri) AND (cha_evrakno_sira = @cha_evrakno_sira) AND (cha_satir_no = @cha_satir_no);insert into CARI_HESAP_HAREKETLERI (cha_RECid_DBCno,cha_RECid_RECno,cha_SpecRecNo,cha_iptal,cha_fileid,cha_hidden,cha_kilitli,cha_degisti,cha_CheckSum,cha_create_user,cha_create_date,cha_lastup_user,cha_lastup_date,cha_special1,cha_special2,cha_special3,cha_firmano,cha_subeno,cha_tarihi,cha_tip,cha_cinsi,cha_normal_Iade,cha_evrak_tip,cha_satir_no,cha_evrakno_seri,cha_evrakno_sira,cha_belge_no,cha_belge_tarih,cha_cari_cins,cha_kod,cha_kasa_hizmet,cha_kasa_hizkod,cha_d_kurtar,cha_d_cins,cha_d_kur,cha_altd_kur,cha_grupno,cha_meblag,cha_vade,cha_fis_tarih,cha_fis_sirano,cha_ft_iskonto1,cha_ft_iskonto2,cha_ft_iskonto3,cha_ft_iskonto4,cha_ft_iskonto5,cha_ft_iskonto6,cha_ft_masraf1,cha_ft_masraf2,cha_ft_masraf3,cha_ft_masraf4,cha_vergi1,cha_vergi2,cha_vergi3,cha_vergi4,cha_vergi5,cha_vergi6,cha_vergi7,cha_vergi8,cha_vergi9,cha_vergi10,cha_yuvarlama,cha_tpoz,cha_aciklama,cha_trefno,cha_sntck_poz,cha_karsidcinsi,cha_karsid_kur,cha_karsidgrupno,cha_srmrkkodu,cha_reftarihi,cha_odeme_arr1,cha_odeme_arr2,cha_odeme_arr3,cha_odeme_arr4,cha_odeme_arr5,cha_odeme_arr6,cha_odeme_arr7,cha_odeme_arr8,cha_miktari,cha_aratoplam,cha_vergipntr,cha_istisnakodu,cha_ver_tev_carpani,cha_stopaj,cha_savsandesfonu,cha_vergisiz_fl,cha_satici_kodu,cha_mustahsil_borsa,cha_mustahsil_bagkur,cha_mustahsil_diger,cha_HalMSDF,cha_HalHamaliye,cha_HalStopaj,cha_HalKomisyonu,cha_StFonPntr,cha_pos_hareketi,cha_vardiya_tarihi,cha_vardiya_no,cha_vardiya_evrak_ti,cha_HalRusum,cha_HalNavlunTut,cha_HalRehinFuture,cha_HalKomisyon,cha_Vade_Farki_Yuz,cha_karsisrmrkkodu,cha_EXIMkodu,cha_HalRehinSandikmiktari,cha_HalSandikVrMiktar,cha_HalSandikTutari,cha_HalSandikKDVTutari,cha_HalrehinSandikTutari,cha_Tevkifat_turu,cha_ticaret_turu,cha_otvtutari,cha_otvvergisiz_fl,cha_projekodu,cha_sozlesme_DBCno,cha_sozlesme_RECno,cha_yat_tes_kodu,cha_ciro_cari_kodu,cha_oivergisiz_fl,cha_meblag_ana_doviz_icin_gecersiz_fl,cha_meblag_alt_doviz_icin_gecersiz_fl,cha_meblag_orj_doviz_icin_gecersiz_fl,cha_ciroprim_DBCno,cha_ciroprim_RECno,cha_HalHamaliyeKdv,cha_HalHamaliyeVergisiz_fl) values (@cha_RECid_DBCno,@cha_RECid_RECno,@cha_SpecRecNo,@cha_iptal,@cha_fileid,@cha_hidden,@cha_kilitli,@cha_degisti,@cha_CheckSum,@cha_create_user,@cha_create_date,@cha_lastup_user,@cha_lastup_date,@cha_special1,@cha_special2,@cha_special3,@cha_firmano,@cha_subeno,@cha_tarihi,@cha_tip,@cha_cinsi,@cha_normal_Iade,@cha_evrak_tip,@cha_satir_no,@cha_evrakno_seri,@cha_evrakno_sira,@cha_belge_no,@cha_belge_tarih,@cha_cari_cins,@cha_kod,@cha_kasa_hizmet,@cha_kasa_hizkod,@cha_d_kurtar,@cha_d_cins,@cha_d_kur,@cha_altd_kur,@cha_grupno,@cha_meblag,@cha_vade,@cha_fis_tarih,@cha_fis_sirano,@cha_ft_iskonto1,@cha_ft_iskonto2,@cha_ft_iskonto3,@cha_ft_iskonto4,@cha_ft_iskonto5,@cha_ft_iskonto6,@cha_ft_masraf1,@cha_ft_masraf2,@cha_ft_masraf3,@cha_ft_masraf4,@cha_vergi1,@cha_vergi2,@cha_vergi3,@cha_vergi4,@cha_vergi5,@cha_vergi6,@cha_vergi7,@cha_vergi8,@cha_vergi9,@cha_vergi10,@cha_yuvarlama,@cha_tpoz,@cha_aciklama,@cha_trefno,@cha_sntck_poz,@cha_karsidcinsi,@cha_karsid_kur,@cha_karsidgrupno,@cha_srmrkkodu,@cha_reftarihi,@cha_odeme_arr1,@cha_odeme_arr2,@cha_odeme_arr3,@cha_odeme_arr4,@cha_odeme_arr5,@cha_odeme_arr6,@cha_odeme_arr7,@cha_odeme_arr8,@cha_miktari,@cha_aratoplam,@cha_vergipntr,@cha_istisnakodu,@cha_ver_tev_carpani,@cha_stopaj,@cha_savsandesfonu,@cha_vergisiz_fl,@cha_satici_kodu,@cha_mustahsil_borsa,@cha_mustahsil_bagkur,@cha_mustahsil_diger,@cha_HalMSDF,@cha_HalHamaliye,@cha_HalStopaj,@cha_HalKomisyonu,@cha_StFonPntr,@cha_pos_hareketi,@cha_vardiya_tarihi,@cha_vardiya_no,@cha_vardiya_evrak_ti,@cha_HalRusum,@cha_HalNavlunTut,@cha_HalRehinFuture,@cha_HalKomisyon,@cha_Vade_Farki_Yuz,@cha_karsisrmrkkodu,@cha_EXIMkodu,@cha_HalRehinSandikmiktari,@cha_HalSandikVrMiktar,@cha_HalSandikTutari,@cha_HalSandikKDVTutari,@cha_HalrehinSandikTutari,@cha_Tevkifat_turu,@cha_ticaret_turu,@cha_otvtutari,@cha_otvvergisiz_fl,@cha_projekodu,@cha_sozlesme_DBCno,@cha_sozlesme_RECno,@cha_yat_tes_kodu,@cha_ciro_cari_kodu,@cha_oivergisiz_fl,@cha_meblag_ana_doviz_icin_gecersiz_fl,@cha_meblag_alt_doviz_icin_gecersiz_fl,@cha_meblag_orj_doviz_icin_gecersiz_fl,@cha_ciroprim_DBCno,@cha_ciroprim_RECno,@cha_HalHamaliyeKdv,@cha_HalHamaliyeVergisiz_fl);SELECT SCOPE_IDENTITY()";
            List<SqlParameter> prmList = new List<SqlParameter>();
            byte[] tipler = EvrakCins(tip, false);

            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_RECno", SqlDbType = SqlDbType.Int, Value = -1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_SpecRecNo", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_iptal", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fileid", SqlDbType = SqlDbType.SmallInt, Value = 51 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_hidden", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kilitli", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_degisti", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_CheckSum", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special1", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special2", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special3", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_firmano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_subeno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tarihi", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tip", SqlDbType = SqlDbType.TinyInt, Value = tipler[0] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cinsi", SqlDbType = SqlDbType.TinyInt, Value = tipler[1] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_normal_Iade", SqlDbType = SqlDbType.TinyInt, Value = tipler[2] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrak_tip", SqlDbType = SqlDbType.TinyInt, Value = tipler[3] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satir_no", SqlDbType = SqlDbType.Int, Value = satir });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_seri", SqlDbType = SqlDbType.NVarChar, Value = evrakSeri });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_sira", SqlDbType = SqlDbType.Int, Value = evrakSira });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_no", SqlDbType = SqlDbType.NVarChar, Value = belgeNo });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_tarih", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cari_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kod", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });

            if (tip == EvrakTipleri.ToptanSatisFaturasi)
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizmet", SqlDbType = SqlDbType.TinyInt, Value = 0 });
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizkod", SqlDbType = SqlDbType.NVarChar, Value = "" });
            }
            else
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizmet", SqlDbType = SqlDbType.TinyInt, Value = 3 });
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizkod", SqlDbType = SqlDbType.NVarChar, Value = kasaKodu });
            }

            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_kurtar", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_altd_kur", SqlDbType = SqlDbType.Float, Value = 1 });

            if (cariCins == 2)
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_grupno", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            }
            else
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_grupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            }

            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag", SqlDbType = SqlDbType.Float, Value = meblag });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vade", SqlDbType = SqlDbType.Int, Value = vade });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_tarih", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_sirano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto1", SqlDbType = SqlDbType.Float, Value = isk1Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto2", SqlDbType = SqlDbType.Float, Value = isk2Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto3", SqlDbType = SqlDbType.Float, Value = isk3Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi1", SqlDbType = SqlDbType.Float, Value = vergiler[0] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi2", SqlDbType = SqlDbType.Float, Value = vergiler[1] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi3", SqlDbType = SqlDbType.Float, Value = vergiler[2] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi4", SqlDbType = SqlDbType.Float, Value = vergiler[3] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi5", SqlDbType = SqlDbType.Float, Value = vergiler[4] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi6", SqlDbType = SqlDbType.Float, Value = vergiler[5] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi7", SqlDbType = SqlDbType.Float, Value = vergiler[6] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi8", SqlDbType = SqlDbType.Float, Value = vergiler[7] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi9", SqlDbType = SqlDbType.Float, Value = vergiler[8] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi10", SqlDbType = SqlDbType.Float, Value = vergiler[9] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yuvarlama", SqlDbType = SqlDbType.Float, Value = 0 });

            if (cariCins == 4)
                prmList.Add(new SqlParameter() { ParameterName = "@cha_tpoz", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            else
                prmList.Add(new SqlParameter() { ParameterName = "@cha_tpoz", SqlDbType = SqlDbType.TinyInt, Value = 0 });

            prmList.Add(new SqlParameter() { ParameterName = "@cha_aciklama", SqlDbType = SqlDbType.NVarChar, Value = aciklama });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_trefno", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sntck_poz", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidcinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsid_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidgrupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_srmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = srmMerkezi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_reftarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr7", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_odeme_arr8", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_miktari", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_aratoplam", SqlDbType = SqlDbType.Float, Value = araToplam });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergipntr", SqlDbType = SqlDbType.TinyInt, Value = kdvSira });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_istisnakodu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ver_tev_carpani", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_stopaj", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_savsandesfonu", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satici_kodu", SqlDbType = SqlDbType.NVarChar, Value = saticiKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_borsa", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_bagkur", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_mustahsil_diger", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalMSDF", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliye", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalStopaj", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalKomisyonu", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_StFonPntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_pos_hareketi", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_evrak_ti", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRusum", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalNavlunTut", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRehinFuture", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalKomisyon", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_Vade_Farki_Yuz", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsisrmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_EXIMkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalRehinSandikmiktari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikVrMiktar", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalSandikKDVTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalrehinSandikTutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_Tevkifat_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ticaret_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvtutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvvergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_projekodu", SqlDbType = SqlDbType.NVarChar, Value = projeKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sozlesme_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sozlesme_RECno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yat_tes_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciro_cari_kodu", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_oivergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_ana_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_alt_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_orj_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciroprim_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciroprim_RECno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliyeKdv", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_HalHamaliyeVergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });

            int sonuc = -1;

            using (SqlCommand cmd = new SqlCommand(sqlStr, trn.Connection))
            {
                cmd.Transaction = trn;
                foreach (var item in prmList)
                {
                    cmd.Parameters.Add(item);
                }
                object recid = cmd.ExecuteScalar();
                if (recid != null)
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = string.Format("UPDATE CARI_HESAP_HAREKETLERI SET cha_RECid_RECno=cha_RECno WHERE cha_RECno={0}", recid.ToString());
                    cmd.ExecuteNonQuery();
                    sonuc = Convert.ToInt32(recid);
                }
            }
            return sonuc;
        }
    }
}